跳到主要内容

单位属性

单位属性是影响单位行为的一系列数值。

单位数值属性由基础值、百分比变化值两部分组成;基础值 * (100 + 百分比变化值) / 100 得到实际参与游戏运行的最终值; 在需要选择单位数值属性类型的地方,可以选择的内容有:

  • 最终值(实际值)
  • 基础值
  • 百分比变化值

部分单位属性实际是由两个数值合并而成。

实际值 = 基础值 * (1 + 百分比 / 100)

理解这点,才能明白修改单位的三个api[set],[get],[add]内在区别。

  -- 获取的是 实际值
u:get '攻击'
-- 基础值设置为10,百分比设置为0,实际值(计算结果)为10
u:set('攻击', 10)
-- 基础值增加10,百分比不变
u:add('攻击', 10)
-- 百分比增加10,基础值不变
u:add('攻击%', 10)
-- 会报错
u:get '攻击%'
-- 会报错
u:set('攻击%', 10)

此外影响单位属性的还有最大值和最小值,所以实际公式应该为

实际值 = min(最大值,max(最小值, 基础值 * (1 + 百分比 / 100)))

不过最大值和最小值并不一定存在,当它不存在时,就不会对单位属性有影响。

  u:set('攻击', 100)
print(u:get '攻击')
u:set_attribute_max('攻击', 20)
print(u:get '攻击')
u:set_attribute_max('攻击')
print(u:get '攻击')

显示的结果为

100
20
100

为了节约网络资源,默认的情况下大多数的属性都不会通知客户端。你可以根据自己的需要选择同步哪些属性,以及用什么[同步方式]。

属性的最大值、最小值和同步方式,都有一个全局的值和单位自己的值。单位的属性只受单位自己的值影响。单位的值在单位创建时,从全局值复制而来。所以修改全局值不会影响已经存在的单位,只会影响之后创建的单位。

我们提供了21个内置属性和178个[自定义属性]。其中有16个属性是引擎内置的属性,它们确保了所有的基础设施的正常运作,无法禁用;此外还有5个内置属性是由脚本库以及客户端UI提供支持的属性,当你有能力修改这两部分内容时是可以被移除的。

引擎内置属性

攻击

在[伤害结算]中,单位普通攻击的初始伤害等于攻击

护甲

在[伤害结算]中,护甲会在[伤害初始化]事件和[伤害开始]事件之间对伤害做一次修正。

  • 当护甲大于0时,每1点护甲可以使单位多承受1%的伤害,此时伤害算法为

最终伤害 = 伤害 / (1 + 护甲 * 0.01)

  • 当护甲小于0时,每1点护甲会使单位受到的伤害提升1%,此时伤害算法为

最终伤害 = 伤害 * (1 - 护甲 * 0.01)

生命

在[伤害结算]中,在[伤害前效果]事件之后,受到伤害的单位会被扣除最终伤害数值的生命。如果单位因此次扣除生命导致生命变为0或者以下,则会触发[伤害击杀]的结算。

值得注意的是,生命与单位是否存活之间没有必然的关系,直接将单位生命设置为0,并不会发生任何事情,只是这个单位在下一次受到伤害会触发[伤害击杀]的结算(判定成功才会死亡)。

  • 单位的生命无法小于0,也无法超过[生命上限]。
  • 百分比无效

生命上限

单位的[生命]无法超过生命上限。

  • 修改生命上限会导致单位的[生命]按比例缩放。

生命恢复

单位每秒会增长的[生命]。

  • 当单位死亡时,该属性会暂时失效。

魔法

技能中需要用到的属性,请参考[技能]中的详细介绍。

  • 单位的魔法无法小于0,也无法超过[魔法上限]。
  • 百分比无效

魔法上限

单位的[魔法]无法超过魔法上限。

  • 修改魔法上限会导致单位的[魔法]按比例缩放。

魔法恢复

单位每秒会增长的[魔法]。

  • 当单位死亡时,该属性会暂时失效。

攻击速度

影响单位[普通攻击]的冷却时间和[普通攻击]的动画表现。

移动速度

单位每秒能移动的距离。

冷却缩减

单位技能冷却时间减少的比例。

  • 该值为40表示技能的冷却时间减少40%

减耗

单位技能魔法消耗减少的比例。

  • 该值为40表示技能的魔法消耗减少40%

攻击范围

攻击范围总是等价于单位当前[攻击技能]的施法范围。

  • 百分比无效

搜敌范围

这个值决定了[搜敌器]在搜索附近敌人时,搜索范围可以超出[攻击范围]的距离。

视野范围

单位提供视野的范围。请参考[视野]的介绍。

单位标记

[单位标记]虽然作为一个单位属性,但不要使用操作单位属性的api来访问和修改它。请使用它的相关api来操作它。

脚本库提供支持的属性

等级

用于[英雄升级],表示单位的当前等级。

技能点

用于[脚本库]学习技能,决定单位是否可以学习技能。学习技能需要消耗技能点。

自定义属性

在数据编辑器中可以定义自定义属性,提供单位属性的所有基础支持,但没有对这个属性做任何假定和实现,你可以自由地决定它叫什么和干什么。